gusucode.com > MATLAB与控制系统仿真实践 源代码 > MATLAB与控制系统仿真实践 源代码/第九章/eg9_7/sfuntmpl3.m

    function [sys,x0,str,ts] = sfuntmpl3(t,x,u,flag)
A=[-0.09 -0.01;1 0];
B=[1 -7;0 -2];
C=[0 2;1 -5];
D=[-3 0;1 0];
switch flag,

  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);
  
  case 1,
    sys=mdlDerivatives(t,x,u,A,B,C,D);
  
  case {2,4,9},
      sys=[];

  case 3,
    sys=mdlOutputs(t,x,u,A,B,C,D);

 otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end


function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)

sizes = simsizes;

sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

x0  = zeros(2,1);

str = [];

ts  = [0 0];


function sys=mdlDerivatives(t,x,u,A,B,C,D)

sys = A*x+B*u;


function sys=mdlOutputs(t,x,u,A,B,C,D)

sys = C*x+D*u;

% 
% function sys=mdlTerminate(t,x,u)
% 
% sys = [];